Skip to content

feat(codex): add Codex native plugin manifest and fix Claude plugin.json#960

Merged
affaan-m merged 5 commits intoaffaan-m:mainfrom
senoldogann:feat/codex-plugin-manifest
Mar 29, 2026
Merged

feat(codex): add Codex native plugin manifest and fix Claude plugin.json#960
affaan-m merged 5 commits intoaffaan-m:mainfrom
senoldogann:feat/codex-plugin-manifest

Conversation

@senoldogann
Copy link
Copy Markdown
Contributor

@senoldogann senoldogann commented Mar 27, 2026

Summary

This PR adds native Codex plugin support (per the official Codex plugin docs) and fixes a long-standing issue with the Claude plugin manifest.

Problems fixed

1. .claude-plugin/plugin.json was incomplete
The manifest was missing agents, skills, and commands arrays, which caused the Claude plugin validator to fail on install. Violating rules documented in .claude-plugin/PLUGIN_SCHEMA_NOTES.md.

2. No Codex native plugin manifest existed
Codex supports installable plugin bundles but ECC had no .codex-plugin/ directory.

Changes (per official Codex plugin docs)

File Change
.claude-plugin/plugin.json Added agents[] (28 explicit file paths), skills[], commands[]. Removed hooks field (auto-loaded by Claude Code v2.1+)
.codex-plugin/plugin.json New — Codex plugin manifest with skills and mcpServers as strings per official spec, interface block for plugin directory
.mcp.json New — MCP server bundle at plugin root (as required by official docs: only plugin.json belongs inside .codex-plugin/)
.agents/plugins/marketplace.json New — Codex repo marketplace file per official spec ($REPO_ROOT/.agents/plugins/marketplace.json)
.codex-plugin/README.md New — Installation guide
tests/plugin-manifest.test.js New — 22 CI tests enforcing both PLUGIN_SCHEMA_NOTES.md and Codex official spec
package.json Added new files to files[], added plugin manifest test to npm test chain

Type

  • Infrastructure / Plugin system

Testing

All existing tests continue to pass. 22 new tests added and passing:

npm test
# ...
━━━ Running plugin-manifest.test.js ━━━
Passed: 22 / Failed: 0
Exit code: 0

Checklist

  • Follows format guidelines and PLUGIN_SCHEMA_NOTES.md rules
  • All 22 new tests pass, all existing tests pass (exit 0)
  • No sensitive info (API keys, paths)
  • skills/ directory is shared between Claude and Codex — no duplication
  • Verified against official Codex plugin docs

Summary by cubic

Adds a Codex-native plugin manifest with a root .mcp.json and a repo marketplace entry. Fixes the Claude plugin manifest and missing skill metadata, and tightens docs/tests for spec-compliant installs.

  • New Features

    • Added .codex-plugin/plugin.json (with skills and mcpServers as string paths), root .mcp.json, .agents/plugins/marketplace.json, and updated .codex-plugin/README.md with placement/install notes.
    • Bundles MCP servers: @modelcontextprotocol/server-github, @upstash/context7-mcp@2.1.4, exa, @modelcontextprotocol/server-memory, @playwright/mcp@0.0.68, @modelcontextprotocol/server-sequential-thinking.
    • 23 CI tests with stricter guards (no absolute/traversal paths, .mcp.json only at root, mcpServers must be "./.mcp.json", marketplace path resolves to repo root).
  • Bug Fixes

    • Completed .claude-plugin/plugin.json with agents[] (explicit .md paths), skills[], and commands[]; removed hooks (auto-loaded in Claude Code v2.1+).
    • Fixed .agents/plugins/marketplace.json local source.path so Codex CLI resolves the repo root.
    • Added required YAML frontmatter to 7 skills and quoted the Laravel description to fix YAML parse errors.

Written for commit 52e9bd5. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • Added "Everything Claude Code" plugin with bundled skills, user-facing interface, default workflow prompts (TDD, security scan, code review), and a Productivity marketplace listing.
    • Integrated multiple MCP-backed services for expanded capabilities (GitHub, Context7, Exa, Memory, Playwright, Sequential Thinking).
  • Documentation

    • Added Codex plugin setup and installation guide with notes on shared skills and credential behavior.
  • Tests

    • Added manifest validation tests for plugin, skills, MCP, and marketplace configurations.

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 27, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds Codex and Claude plugin manifests, a repository-level MCP server configuration, a marketplace entry, packaging updates to include new artifacts, multiple skill front-matter updates, and a test harness that validates plugin/manifest/MCP/marketplace configuration files.

Changes

Cohort / File(s) Summary
Marketplace
.agents/plugins/marketplace.json
Adds everything-claude-code marketplace entry registering a local plugin at ./.agents/plugins/everything-claude-code with AVAILABLE installation, ON_INSTALL authentication, category Productivity.
Claude manifest
.claude-plugin/plugin.json
Adds top-level fields: agents (explicit ./agents/*.md entries), skills: ["./skills/"], and commands: ["./commands/"].
Codex manifest & docs
.codex-plugin/plugin.json, .codex-plugin/README.md
Adds Codex plugin manifest (everything-claude-code v1.9.0) with metadata, skills: "./skills/", mcpServers: "./.mcp.json", interface/default prompts; README documents layout, MCP usage, and install notes.
MCP config & packaging
.mcp.json, package.json
Adds repo-root .mcp.json declaring six MCP servers (github, context7, exa, memory, playwright, sequential-thinking) and updates package.json files whitelist to include .codex-plugin/* and .mcp.json.
Tests
tests/plugin-manifest.test.js
Adds synchronous Node test harness validating .claude-plugin/plugin.json, .codex-plugin/plugin.json, ./.mcp.json, and .agents/plugins/marketplace.json presence and schema-like constraints.
Skills metadata
skills/*/SKILL.md (multiple)
Adds YAML front-matter (name, description, origin: ECC) to several SKILL.md files and a minor description formatting change in skills/laravel-verification/SKILL.md.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • affaan-m

Poem

"🐇 I hopped through manifests, MCP, and more,

Catalogued skills, and opened the door.
Plugins and tests lined up in a row,
A crunchy marketplace carrot — off we go! 🥕"

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary objective: adding Codex native plugin support and fixing the Claude plugin manifest structure, which aligns with the main changes throughout the PR.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 27, 2026

Greptile Summary

This PR adds a native Codex plugin manifest (.codex-plugin/plugin.json), root MCP server config (.mcp.json), and repo marketplace entry (.agents/plugins/marketplace.json), while also completing the previously incomplete Claude plugin manifest with the required agents[], skills[], and commands[] fields. Seven skills receive YAML frontmatter needed by the Codex CLI parser, and ajv is promoted from devDependencies to dependencies so published CI validation scripts can use it at install time.

Key changes:

  • .claude-plugin/plugin.json: Now complete — 28 explicit agent .md paths, skills and commands directory references, hooks field removed (auto-loaded in Claude Code v2.1+)
  • .codex-plugin/plugin.json: New manifest with skills and mcpServers as string paths per the Codex spec; interface block included for marketplace display
  • .mcp.json: New file at repo root (not inside .codex-plugin/) bundling 6 MCP servers: GitHub, Context7, Exa, Memory, Playwright, and Sequential Thinking
  • .agents/plugins/marketplace.json: source.path = "../.." correctly resolves to repo root from the .agents/plugins/ location — consistent with what the new test suite validates
  • tests/plugin-manifest.test.js: 22 new tests covering both manifests, the MCP config, and the marketplace file; discovered and run automatically by run-all.js (no double-execution in the current npm test chain)
  • Skills: YAML frontmatter added to 6 skills; laravel-verification description quoted to prevent Codex CLI YAML parse errors from the embedded colon

Confidence Score: 5/5

Safe to merge — all previously flagged P1 issues are resolved and the single remaining finding is a minor test-reporting edge case

All three previously flagged P1 concerns (double test execution, .mcp.json diagram placement, marketplace path resolving to a non-existent directory) are addressed in the current commit. The only remaining finding is a P2 style issue in the test helper where module-scope loadJsonObject calls can produce ambiguous CI output on JSON parse failure — this does not affect any production path or normal CI runs.

tests/plugin-manifest.test.js — minor: module-scope JSON loading could be moved inside test() wrappers for cleaner failure reporting

Important Files Changed

Filename Overview
.claude-plugin/plugin.json Adds agents[], skills[], commands[] arrays and removes hooks field; manifest is now structurally complete per PLUGIN_SCHEMA_NOTES.md rules
.codex-plugin/plugin.json New Codex plugin manifest with string-typed skills/mcpServers paths per official Codex spec; interface block complete and validated by new test suite
.agents/plugins/marketplace.json New marketplace file with source.path="../.." which correctly resolves to repo root from .agents/plugins/; validated by test at line 251-272
.mcp.json New MCP server bundle at plugin root with 6 servers (GitHub, Context7, Exa, Memory, Playwright, Sequential Thinking); correct placement outside .codex-plugin/
tests/plugin-manifest.test.js 22 new CI tests for both plugin manifests; loadJsonObject called at module scope can cause unhandled exceptions on parse failure, masking the failed-test counter
package.json Adds Codex plugin files to files[]; ajv promoted from devDependencies to dependencies (used by published CI scripts); test script ends with run-all.js which auto-discovers plugin-manifest.test.js — no double-run
.codex-plugin/README.md Installation guide; structure diagram correctly shows .mcp.json at repo root (not inside .codex-plugin/), consistent with actual file placement and test assertion
skills/laravel-verification/SKILL.md Quoted description value in YAML frontmatter to fix Codex CLI YAML parse errors caused by the colon in the description string

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    ROOT["Repo Root (plugin root)"]

    ROOT --> CP[".claude-plugin/plugin.json\nClaude Code manifest\nagents[], skills[], commands[]"]
    ROOT --> CDP[".codex-plugin/plugin.json\nCodex manifest\nskills=string, mcpServers=string"]
    ROOT --> MCP[".mcp.json\nMCP server bundle\n6 servers"]
    ROOT --> AGT[".agents/plugins/marketplace.json\nCodex marketplace discovery\nsource.path = ../.."]
    ROOT --> SK["skills/ (shared)\n125 skills"]

    CDP -->|mcpServers = ./.mcp.json| MCP
    CDP -->|skills = ./skills/| SK
    CP -->|skills = ./skills/| SK
    AGT -->|resolves ../.. to repo root| ROOT

    MCP --> GH["github\nnpx @modelcontextprotocol/server-github"]
    MCP --> CTX["context7\nnpx @upstash/context7-mcp@2.1.4"]
    MCP --> EXA["exa\nhttps://mcp.exa.ai/mcp"]
    MCP --> MEM["memory\nnpx @modelcontextprotocol/server-memory"]
    MCP --> PW["playwright\nnpx @playwright/mcp@0.0.68"]
    MCP --> ST["sequential-thinking\nnpx @modelcontextprotocol/server-sequential-thinking"]
Loading

Reviews (6): Last reviewed commit: "fix(codex): tighten manifest docs and te..." | Re-trigger Greptile

package.json Outdated
Comment on lines +41 to +42
".agents/",
".agents/plugins/marketplace.json",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Redundant files[] entry

.agents/ (line 41) already recursively includes everything under the .agents/ directory, so the more specific .agents/plugins/marketplace.json entry on line 42 is redundant. npm's files field treats directory entries as recursive globs covering all their contents.

Suggested change
".agents/",
".agents/plugins/marketplace.json",
".agents/",

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
package.json (1)

112-112: Avoid running plugin-manifest.test.js twice in npm test.

node tests/run-all.js already picks up tests/plugin-manifest.test.js, so the extra explicit call duplicates execution.

♻️ Suggested patch
-    "test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js && node tests/plugin-manifest.test.js",
+    "test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js",

As per coding guidelines, "Applies to tests/**/*.test.js : Run tests using Node.js test runner with the command node tests/run-all.js for all tests..."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` at line 112, The test script in package.json currently runs
node tests/run-all.js and then explicitly runs node
tests/plugin-manifest.test.js, causing plugin-manifest.test.js to execute twice;
edit the "test" script to remove the redundant explicit invocation of node
tests/plugin-manifest.test.js so that only node tests/run-all.js is responsible
for running all tests (update the "test" npm script entry to drop the explicit
plugin-manifest.test.js call).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.codex-plugin/README.md:
- Around line 8-11: Update the README tree diagram to show .mcp.json at the repo
root rather than inside .codex-plugin: change the diagram lines referencing
".codex-plugin/ └── .mcp.json" so that .mcp.json appears alongside the
.codex-plugin directory (e.g., list .codex-plugin/ and then on the next
root-level line show .mcp.json), ensuring the manifest plugin.json remains under
.codex-plugin; update the block in README.md that contains the tree diagram
accordingly.

In @.mcp.json:
- Around line 8-10: Replace floating `@latest` tags in the npx args with fixed,
tested versions to ensure reproducible builds: update the args entry that
currently contains "@upstash/context7-mcp@latest" to
"@upstash/context7-mcp@2.1.4" and likewise wherever "@playwright/mcp@latest" is
used change it to "@playwright/mcp@0.0.68" (look for the "command": "npx" entry
and the args array items to edit the package strings).

In `@tests/plugin-manifest.test.js`:
- Around line 134-143: The test 'codex plugin.json mcpServers points to plugin
root .mcp.json (not inside .codex-plugin/)' should assert an exact value rather
than a permissive check: replace the current fuzzy assertion on
codexPlugin.mcpServers and the include/regex logic with a strict equality check
that codexPlugin.mcpServers === './.mcp.json', then continue to resolve mcpPath
using repoRoot and the value and verify fs.existsSync(mcpPath) as before; update
references in the test to use the exact string comparison on
codexPlugin.mcpServers to enforce the contract.

---

Nitpick comments:
In `@package.json`:
- Line 112: The test script in package.json currently runs node tests/run-all.js
and then explicitly runs node tests/plugin-manifest.test.js, causing
plugin-manifest.test.js to execute twice; edit the "test" script to remove the
redundant explicit invocation of node tests/plugin-manifest.test.js so that only
node tests/run-all.js is responsible for running all tests (update the "test"
npm script entry to drop the explicit plugin-manifest.test.js call).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6fd72381-488e-435c-9a00-8388b80e5f84

📥 Commits

Reviewing files that changed from the base of the PR and between cc60bf6 and 4208533.

📒 Files selected for processing (7)
  • .agents/plugins/marketplace.json
  • .claude-plugin/plugin.json
  • .codex-plugin/README.md
  • .codex-plugin/plugin.json
  • .mcp.json
  • package.json
  • tests/plugin-manifest.test.js

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 7 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="package.json">

<violation number="1" location="package.json:112">
P3: Remove the extra `node tests/plugin-manifest.test.js` invocation from `npm test` to avoid running the same test file twice and inflating CI runtime.</violation>
</file>

<file name="tests/plugin-manifest.test.js">

<violation number="1" location="tests/plugin-manifest.test.js:59">
P3: The new mcpServers test is too permissive: it only rejects paths containing ".codex-plugin" and checks existence, so non-root paths (e.g. ../shared/.mcp.json or ./configs/mcp.json) still pass. This doesn't enforce the stated requirement that mcpServers points to the plugin-root .mcp.json.</violation>
</file>

<file name=".codex-plugin/README.md">

<violation number="1" location=".codex-plugin/README.md:10">
P2: README documents `.mcp.json` under `.codex-plugin/`, but the file actually lives at repo root, creating misleading plugin layout docs.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

package.json Outdated
"orchestrate:worker": "bash scripts/orchestrate-codex-worker.sh",
"orchestrate:tmux": "node scripts/orchestrate-worktrees.js",
"test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js",
"test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js && node tests/plugin-manifest.test.js",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Remove the extra node tests/plugin-manifest.test.js invocation from npm test to avoid running the same test file twice and inflating CI runtime.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At package.json, line 112:

<comment>Remove the extra `node tests/plugin-manifest.test.js` invocation from `npm test` to avoid running the same test file twice and inflating CI runtime.</comment>

<file context>
@@ -105,7 +109,7 @@
     "orchestrate:worker": "bash scripts/orchestrate-codex-worker.sh",
     "orchestrate:tmux": "node scripts/orchestrate-worktrees.js",
-    "test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js",
+    "test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js && node tests/plugin-manifest.test.js",
     "coverage": "c8 --all --include=\"scripts/**/*.js\" --check-coverage --lines 80 --functions 80 --branches 80 --statements 80 --reporter=text --reporter=lcov node tests/run-all.js"
   },
</file context>
Suggested change
"test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js && node tests/plugin-manifest.test.js",
"test": "node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && node scripts/ci/catalog.js --text && node tests/run-all.js",
Fix with Cubic

@senoldogann senoldogann force-pushed the feat/codex-plugin-manifest branch from 4208533 to c634adf Compare March 27, 2026 07:42
@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.codex-plugin/README.md:
- Around line 27-29: Update the README line that shows "codex plugin install ./"
to explicitly state that this command must be executed from the repository root
so that "./" resolves to the repo root and the tool will find .mcp.json
correctly; mention the file name ".mcp.json" and the command "codex plugin
install ./" (or note "run from repo root") so readers inside the .codex-plugin/
directory aren't misled.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 24ec7e73-b0c9-4239-b6a8-36df012ef5f1

📥 Commits

Reviewing files that changed from the base of the PR and between 4208533 and c634adf.

📒 Files selected for processing (7)
  • .agents/plugins/marketplace.json
  • .claude-plugin/plugin.json
  • .codex-plugin/README.md
  • .codex-plugin/plugin.json
  • .mcp.json
  • package.json
  • tests/plugin-manifest.test.js
✅ Files skipped from review due to trivial changes (5)
  • package.json
  • .agents/plugins/marketplace.json
  • .claude-plugin/plugin.json
  • .mcp.json
  • .codex-plugin/plugin.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/plugin-manifest.test.js

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c634adfa16

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@0.0.68", "--extension"]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Drop --extension from default Playwright MCP config

The Playwright server is configured with --extension, which switches Playwright MCP into browser-extension bridge mode and requires the Playwright MCP Bridge to be installed. In the common Codex CLI setup (plain npx @playwright/mcp), this makes the bundled Playwright integration unusable for users who have not installed that extension, so Playwright-based workflows in this plugin fail out of the box.

Useful? React with 👍 / 👎.

@senoldogann senoldogann force-pushed the feat/codex-plugin-manifest branch from c634adf to 1e83350 Compare March 27, 2026 15:35
@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1e83350291

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"name": "everything-claude-code",
"source": {
"source": "local",
"path": "./everything-claude-code"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Point marketplace source path at the actual plugin root

In the repo marketplace entry, source.path is set to ./everything-claude-code, but this repository does not contain a nested everything-claude-code/ directory, so Codex will resolve this to a non-existent plugin folder and fail to load/install it from the marketplace flow. I checked this against the new marketplace file and the repo root layout: the plugin manifest lives at this repo root (.codex-plugin/plugin.json), so the path should target that real directory (for example ./ or another existing plugin directory).

Useful? React with 👍 / 👎.

@senoldogann senoldogann force-pushed the feat/codex-plugin-manifest branch from 1e83350 to b75c613 Compare March 27, 2026 15:43
@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b75c613579

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

languageName: node
linkType: hard
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the lockfile in Yarn Berry format

This change downgrades yarn.lock to v1 format (# yarn lockfile v1), while the repo still pins Yarn 4 in package.json (packageManager: yarn@4.9.2) and runs a Yarn install job in CI (.github/workflows/ci.yml). That mismatch makes Yarn Berry treat the lockfile as outdated, causing repeated lockfile rewrites and breaking reproducible/immutable Yarn installs; the lockfile should remain in Berry (__metadata) format.

Useful? React with 👍 / 👎.

Comment on lines +210 to +211
assert.ok(plugin.source && plugin.source.source, `Plugin "${plugin.name}" missing source.source`);
assert.ok(plugin.policy && plugin.policy.installation, `Plugin "${plugin.name}" missing policy.installation`);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate local marketplace source paths in tests

The new marketplace test only checks that plugin.source.source exists, but it never validates plugin.source.path for local entries. That allows a broken local path to pass CI and only fail at install time when the marketplace loader tries to resolve the plugin directory. Add an assertion that local sources include a non-empty source.path and that it resolves to an existing directory.

Useful? React with 👍 / 👎.

@senoldogann senoldogann force-pushed the feat/codex-plugin-manifest branch from b75c613 to f61e1cf Compare March 27, 2026 16:00
@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 27, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
.codex-plugin/README.md (1)

27-29: ⚠️ Potential issue | 🟡 Minor

Clarify that local install must run from repository root.

codex plugin install ./ is ambiguous when this README is opened inside .codex-plugin/; add a short note that ./ should be the repo root so .mcp.json resolves correctly.

🛠️ Suggested patch
-# Or reference locally during development
+# Or reference locally during development (run from repository root so ./.mcp.json is found)
 codex plugin install ./
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.codex-plugin/README.md around lines 27 - 29, Update the README note that
shows "codex plugin install ./" to explicitly state that the command must be run
from the repository root so that "./" resolves to the repo root and the
.mcp.json file can be located; add one short sentence after the example
clarifying "Run this from the repository root (so ./ points to the repo root and
.mcp.json resolves correctly)." Reference the same example line ("codex plugin
install ./") when adding the clarification.
🧹 Nitpick comments (1)
tests/plugin-manifest.test.js (1)

58-67: Add path traversal guards for manifest-provided agent paths.

agents[] values come from file content; extension checks are good, but ../ segments should also be rejected before resolving against repoRoot.

🛠️ Suggested patch
 test('claude plugin.json agents uses explicit file paths (not directories)', () => {
   for (const agentPath of claudePlugin.agents) {
+    const normalized = path.posix.normalize(agentPath.replace(/\\/g, '/'));
     assert.ok(
       agentPath.endsWith('.md'),
       `Expected explicit .md file path, got: ${agentPath}`,
     );
     assert.ok(
       !agentPath.endsWith('/'),
       `Expected explicit file path, not directory, got: ${agentPath}`,
     );
+    assert.ok(
+      !normalized.startsWith('../') && !normalized.includes('/../'),
+      `Agent path must not traverse directories: ${agentPath}`,
+    );
   }
 });
 
 test('claude plugin.json all agent files exist', () => {
   for (const agentRelPath of claudePlugin.agents) {
-    const absolute = path.join(repoRoot, agentRelPath.replace(/^\.\//, ''));
+    const absolute = path.resolve(repoRoot, agentRelPath);
+    assert.ok(
+      absolute.startsWith(path.resolve(repoRoot) + path.sep),
+      `Agent path resolves outside repo root: ${agentRelPath}`,
+    );
     assert.ok(
       fs.existsSync(absolute),
       `Agent file missing: ${agentRelPath}`,
     );
   }
 });

As per coding guidelines: “Never trust external data (API responses, user input, file content)”.

Also applies to: 71-73

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/plugin-manifest.test.js` around lines 58 - 67, The test currently only
checks file extension and lack of trailing slash for entries in
claudePlugin.agents; add path-traversal guards to reject any agentPath that
contains ".." path segments or is absolute before it would be resolved against
repoRoot (e.g., check for patterns like "../" or leading "/" or
platform-equivalent path traversal) so the test asserts these are invalid;
update the loop over claudePlugin.agents (and the similar check at 71-73) to
assert agentPath does not include path traversal segments or absolute paths in
addition to the existing .md and directory checks.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/plugin-manifest.test.js`:
- Line 12: Update the test file header to use the repository-standard test
runner: replace the current "Run with: node tests/plugin-manifest.test.js"
header instruction in tests/plugin-manifest.test.js with "Run with: node
tests/run-all.js" so maintainers use the centralized runner; ensure any
README/top comment in the file references node tests/run-all.js and not the
file-specific node invocation.
- Line 47: Top-level synchronous JSON.parse/fs.readFileSync calls (e.g.,
creating claudePlugin from claudePluginPath and the similar codexPlugin,
mcpConfig, marketplace variables) can crash the test process before the Jest
harness reports failures; move the file reads and JSON.parse into a test-safe
hook (like beforeAll) or into the individual test blocks and handle parse errors
with assertions so failures are reported by the test runner rather than aborting
the suite; update references to claudePlugin, codexPlugin, mcpConfig and
marketplace accordingly so they are assigned inside the hook/test and any
JSON.parse is wrapped in try/catch or assertion logic to surface errors as test
failures.

---

Duplicate comments:
In @.codex-plugin/README.md:
- Around line 27-29: Update the README note that shows "codex plugin install ./"
to explicitly state that the command must be run from the repository root so
that "./" resolves to the repo root and the .mcp.json file can be located; add
one short sentence after the example clarifying "Run this from the repository
root (so ./ points to the repo root and .mcp.json resolves correctly)."
Reference the same example line ("codex plugin install ./") when adding the
clarification.

---

Nitpick comments:
In `@tests/plugin-manifest.test.js`:
- Around line 58-67: The test currently only checks file extension and lack of
trailing slash for entries in claudePlugin.agents; add path-traversal guards to
reject any agentPath that contains ".." path segments or is absolute before it
would be resolved against repoRoot (e.g., check for patterns like "../" or
leading "/" or platform-equivalent path traversal) so the test asserts these are
invalid; update the loop over claudePlugin.agents (and the similar check at
71-73) to assert agentPath does not include path traversal segments or absolute
paths in addition to the existing .md and directory checks.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 79c1fbc3-2ebc-4a16-b89d-7ba18991c00c

📥 Commits

Reviewing files that changed from the base of the PR and between 1e83350 and f61e1cf.

⛔ Files ignored due to path filters (2)
  • package-lock.json is excluded by !**/package-lock.json
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (7)
  • .agents/plugins/marketplace.json
  • .claude-plugin/plugin.json
  • .codex-plugin/README.md
  • .codex-plugin/plugin.json
  • .mcp.json
  • package.json
  • tests/plugin-manifest.test.js
✅ Files skipped from review due to trivial changes (4)
  • package.json
  • .codex-plugin/plugin.json
  • .mcp.json
  • .claude-plugin/plugin.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • .agents/plugins/marketplace.json

assert.ok(fs.existsSync(claudePluginPath), 'Expected .claude-plugin/plugin.json to exist');
});

const claudePlugin = JSON.parse(fs.readFileSync(claudePluginPath, 'utf8'));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Top-level JSON parsing can abort the suite before summary/reporting.

These JSON.parse(fs.readFileSync(...)) calls execute outside test(...), so a missing/invalid file crashes the process and bypasses the harness failure accounting.

🛠️ Suggested refactor pattern
+function parseJsonOrAssert(filePath, label) {
+  try {
+    return JSON.parse(fs.readFileSync(filePath, 'utf8'));
+  } catch (err) {
+    assert.fail(`${label} is unreadable or invalid JSON: ${err.message}`);
+  }
+}
...
-const claudePlugin = JSON.parse(fs.readFileSync(claudePluginPath, 'utf8'));
+let claudePlugin;
+test('claude plugin.json is valid JSON', () => {
+  claudePlugin = parseJsonOrAssert(claudePluginPath, '.claude-plugin/plugin.json');
+});

Apply the same pattern to codexPlugin, mcpConfig, and marketplace.

Also applies to: 108-108, 168-168, 197-197

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/plugin-manifest.test.js` at line 47, Top-level synchronous
JSON.parse/fs.readFileSync calls (e.g., creating claudePlugin from
claudePluginPath and the similar codexPlugin, mcpConfig, marketplace variables)
can crash the test process before the Jest harness reports failures; move the
file reads and JSON.parse into a test-safe hook (like beforeAll) or into the
individual test blocks and handle parse errors with assertions so failures are
reported by the test runner rather than aborting the suite; update references to
claudePlugin, codexPlugin, mcpConfig and marketplace accordingly so they are
assigned inside the hook/test and any JSON.parse is wrapped in try/catch or
assertion logic to surface errors as test failures.

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 28, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 28, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 8 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name=".agents/plugins/marketplace.json">

<violation number="1" location=".agents/plugins/marketplace.json:11">
P1: Local plugin path was changed to a likely invalid location and may break plugin discovery due to incorrect relative pathing.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

- Add .codex-plugin/plugin.json — Codex-native plugin manifest with
  skills reference and MCP server config pointer
- Add .codex-plugin/.mcp.json — standalone MCP server config bundle
  (github, context7, exa, memory, playwright, sequential-thinking)
- Add .codex-plugin/README.md — installation guide and server reference
- Fix .claude-plugin/plugin.json — add missing agents[] (28 explicit
  file paths per validator rules), skills[], and commands[] arrays;
  remove hooks field (auto-loaded by Claude Code v2.1+ convention)
- Add tests/plugin-manifest.test.js — 16 CI tests enforcing
  PLUGIN_SCHEMA_NOTES.md rules (no hooks, arrays throughout, explicit
  agent paths, version required, .mcp.json structural checks)
- Update package.json: add .codex-plugin/ to files[], add plugin
  manifest test to npm test chain

Refs: .claude-plugin/PLUGIN_SCHEMA_NOTES.md
senoldogann and others added 3 commits March 28, 2026 20:06
Codex CLI resolves plugin paths relative to the home directory (~),
not relative to marketplace.json. The previous path "./everything-claude-code"
resolved to ~/everything-claude-code (non-existent), causing "plugin/read failed"
error in the TUI.
Codex CLI requires YAML frontmatter (---) in SKILL.md files.
6 skills were missing frontmatter entirely; laravel-verification had
a bare colon in its description causing an invalid YAML parse error.
@affaan-m affaan-m force-pushed the feat/codex-plugin-manifest branch from 0e52e22 to 4257c09 Compare March 29, 2026 00:06
@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 29, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 29, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 29, 2026

Analyzing 5000 commits...

@ecc-tools
Copy link
Copy Markdown
Contributor

ecc-tools bot commented Mar 29, 2026

Analysis Failed

Not Found - https://docs.github.com/rest/git/refs#get-a-reference

Troubleshooting
Cause Resolution
Large repository Analysis may timeout on repos with extensive history
API rate limits Wait 15 minutes before retrying
Network issues Queue timeout is 15 minutes; retry may succeed
Permissions Verify app has Contents: Read access

Retry: /ecc-tools analyze


Report Issue | ECC Tools

@affaan-m affaan-m merged commit f98207f into affaan-m:main Mar 29, 2026
4 checks passed
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 2 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name=".codex-plugin/README.md">

<violation number="1" location=".codex-plugin/README.md:30">
P2: Plain prose inside a bash code fence breaks copy-paste execution of the install snippet.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

# Or reference locally during development
codex plugin install ./

Run this from the repository root so `./` points to the repo root and `.mcp.json` resolves correctly.
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Plain prose inside a bash code fence breaks copy-paste execution of the install snippet.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .codex-plugin/README.md, line 30:

<comment>Plain prose inside a bash code fence breaks copy-paste execution of the install snippet.</comment>

<file context>
@@ -26,6 +26,8 @@ codex plugin install affaan-m/everything-claude-code
 # Or reference locally during development
 codex plugin install ./
+
+Run this from the repository root so `./` points to the repo root and `.mcp.json` resolves correctly.

</file context>


</details>

```suggestion
# Run this from the repository root so `./` points to the repo root and `.mcp.json` resolves correctly.
Fix with Cubic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants